import {VNode} from "vue";

/**
 * element plus数据表格基础属性
 */
export type TableColumnBase = {
    label: string//表格类型
    prop: string//字段名
    sortable?: boolean,
    index?: number | Function//label
    width?: string | number//对应列宽
    minWidth?: string | number//最低列宽
    fixed?: 'left' | 'right'//固定表头
    resizable?: boolean//是否可以拖动改变宽度
    align?: 'left' | 'center' | 'right'//对齐方式
    headerAlign?: 'left' | 'center' | 'right'//表头对齐方式
    showOverflowTooltip?: boolean,
    render?: (row: any, index: any) => VNode | string//函数方式渲染
    prefix?: string//前缀
    suffix?: string//后缀
}

/**
 * 多选数据类型
 */
export type TableColumnSelectable = Omit<TableColumnBase, 'prop' | 'label'> & {
    prop?: string
    label?: string
    type: "selection"
}


/**
 * 长文本
 */
export type TableColumnLongText = TableColumnBase & {
    type: "long-text"
}


/**
 * 时间日期类型数据
 */
export type TableColumnImage = TableColumnBase & {
    type: "image"
}


/**
 * 时间日期类型数据
 */
export type TableColumnTime = TableColumnBase & {
    type: "timestramp"
    format?: string//日期格式化类型
}


/**
 * 时间日期类型数据
 */
export type TableColumnExpand = Omit<TableColumnBase, 'prop' | 'label'> & {
    type: "expand"
}


/**
 * 显示切换
 */
export type TableStatus = TableColumnBase & {
    type: "status"
    edit: false | true //是否可编辑,
    event?: string,
    inactiveText?: string//否定状态文字
    activeText?: string// 显示状态文字
}


/**
 * 时间日期类型数据
 */
export type TableColumnLabels = TableColumnBase & {
    type: "labels",
    limit?: number
}

/**
 * JSON类型的数据处理
 */
export type TableColumnJson = TableColumnBase & {
    type: "json"
    property: string | string[]//json属性名
}


/**
 * 操作按钮
 */
export type TableColumnAction = Omit<TableColumnBase, 'prop'> & {
    type: "action",
    prop?: string
    update?: boolean,
    remove?: boolean
}


/**
 * 索引序号
 */
export type TableColumnIndex = Omit<TableColumnBase, 'prop'> & {
    type: "index",
    prop?: string
}

/**
 * 导出表格类型
 */
export type TableColumn = TableColumnBase | TableColumnTime | TableColumnAction | TableColumnIndex | TableColumnSelectable | TableColumnImage | TableColumnJson | TableColumnLabels | TableStatus | TableColumnExpand | TableColumnLongText